package br.ufg.inf.sd.truco;

import java.rmi.Remote; 
import java.rmi.RemoteException;

/**
 * TrucoInterface.java
 * Esta interface lista todos os métodos oferecidos pelo servidor 
 * do jogo de "Truco" distribuído.
 * @author Egio Arruda Junior & Andre Vilas Boas
 * @version 1.0
 */

public interface TrucoInterface extends Remote {
	
   /** O join() realiza a adesão do jogador ao servidor, e retorna um código que será utilizado
    *  para encontrar o jogador na rede;
    *  @param IPadress string que contem o host do cliente em questão;
    *  @return 0 significa que tudo ocorreu bem e 1 caso algum erro tenha ocorrido
    *  @throws RemoteException Excecao referente a falhas de objetos remotos.
    */
	public int join(String dupla, String IPadress) throws RemoteException;   
   
   /** O play() é responsável por executar a ação de jogar, e passa a vez para o próximo jogador;
    *  @param carta carta que o jogador deseja jogar;
    *  @throws RemoteException Exceção referente a falhas de objetos remotos.
    */ 
	public void play(Carta carta) throws RemoteException;
	
   /** O truco() envia requisição de truco ao próximo jogador(adversário);
    *  Se o truco for aceito, e retornado o valor true e o jogo segue,
    *  senao a rodada termina e a dupla ganha um ponto.
    *  OBS.: Se o jogo estiver trucado e o oponente pedir truco o valor dos
    *  pontos da partida e acrescido em três, até totalizar no máximo doze pontos.
    *  @throws RemoteException Excecao referente a falhas de objetos remotos.
    */
   public void truco() throws RemoteException;
   
   /** 
    * Método criado para verificar se o jogo esta trucado.
    * Se o jogo estiver trucado é retornado o valor true, caso contrário o valor false é retornado.
    * @throws RemoteException Excecao referente a falhas de objetos remotos.
    */
   public boolean isTrucado() throws RemoteException;
   
   /** 
    * O método correr() e utilizado quando o jogador deseja desistir da partida.
    * @throws RemoteException Exceção referente a falhas de objetos remotos.
    */
   public void correr() throws RemoteException;
   
   /** Este método permite a um cliente sair do jogo, repassando 
	 * ao servidor do jogo seu id. Saindo um dos jogadores o
	 * jogo se encerra automaticamente.
	 * @param id identificação do cliente que deseja sair do jogo.
	 * @throws RemoteException Exceção referente a falhas de objetos remotos.
	 */
	public void sairDoJogo(int id) throws RemoteException;
}
